SCP(Secure Copy Protocol)命令详解
SCP 是基于 SSH 协议的安全文件传输工具,用于在本地主机和远程主机之间(或两个远程主机之间)加密传输文件。以下是 SCP 的详细用法及常见场景:
基本语法
scp [选项] 源文件 目标路径
常见场景
本地 → 远程
scp /本地/文件路径 user@remote_host:/远程/目标路径
远程 → 本地
scp user@remote_host:/远程/文件路径 /本地/目标路径
远程 → 远程
scp user1@host1:/路径/文件 user2@host2:/目标路径
常用选项
选项 | 说明 |
---|---|
-P <端口> |
指定 SSH 端口(默认 22,注意是大写 P ) |
-r |
递归复制整个目录(含子目录和文件) |
-C |
启用压缩传输(节省带宽,适合大文件) |
-p |
保留文件原始属性(修改时间、权限等) |
-q |
静默模式(不显示传输进度) |
-v |
显示详细传输过程(调试用) |
-l <速率> |
限制带宽(单位:Kbit/s,如 -l 100 ) |
-i <密钥> |
指定 SSH 私钥文件(默认 ~/.ssh/id_rsa ) |
示例
复制本地文件到远程服务器(非默认端口)
scp -P 2222 ~/file.txt user@example.com:/home/user/
递归复制目录到远程服务器
scp -r /本地/dir user@example.com:/远程/路径
从远程服务器下载文件到本地
scp user@example.com:/远程/file.txt ~/下载/
保留文件属性并启用压缩
scp -Cp file.txt user@example.com:/目标路径
使用密钥认证传输
scp -i ~/.ssh/custom_key.pem file.txt user@example.com:~
限制带宽为 100 Kbit/s
scp -l 100 largefile.iso user@example.com:~
注意事项
路径格式
- 远程路径格式:
user@host:path
,:
后直接跟路径,无空格。 - 路径含空格时需用引号包裹:
scp "user@host:'remote file.txt'" .
- 远程路径格式:
权限问题
- 确保对源文件有读取权限,对目标路径有写入权限。
若使用密钥认证,需设置私钥权限为
600
:chmod 600 ~/.ssh/id_rsa
安全性
- SCP 依赖 SSH,默认使用加密传输。
- 避免在命令行中直接写密码(建议配置 SSH 密钥免密登录)。
性能优化
大文件传输建议结合
tar
压缩:tar czf - /大目录 | ssh user@host "tar xzf - -C /目标路径"
常见问题
连接超时或拒绝
- 检查防火墙是否放行 SSH 端口。
- 确认远程主机的 SSH 服务已启动。
scp: command not found
安装 OpenSSH 客户端:
sudo apt install openssh-client # Debian/Ubuntu sudo yum install openssh-clients # CentOS/RHEL
传输中断
使用
rsync
代替 SCP 支持断点续传:rsync -Pav -e "ssh -p 2222" file.txt user@host:/路径
通过 SCP 可以高效安全地传输文件,适合简单场景。对于复杂需求(如增量同步),建议使用 rsync
或 sftp
。